import { OrganizationModule } from './modules/organization/organization.module';
import { ApolloDriver } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './modules/user/user.module';
import { OSSModule } from './modules/oss/oss.module';
import { AuthModule } from './modules/auth/auth.module';
import { StudentModule } from './modules/student/student.module';
import { CourseModule } from './modules/course/course.module';
import { CourseTypeModule } from './modules/course-type/course-type.module';
import { ConsumptionTypeModule } from './modules/consumption-type/consumption-type.module';
import { ConsumptionModule } from './modules/consumption/consumption.module';
import { ReservationModule } from './modules/reservation/reservation.module';
import { CardModule } from './modules/card/card.module';
import { ProductModule } from './modules/product/product.module';
import { OrderModule } from './modules/order/order.module';
import { WxpayModule } from './modules/wxpay/wxpay.module';
import { ConfigModule } from '@nestjs/config';
import { CardRecordModule } from './modules/cardRecord/card-record.module';
import { ScheduleModule } from './modules/schedule/schedule.module';
import { ScheduleRecordModule } from './modules/schedule-record/schedule-record.module';
import { WxorderModule } from './modules/wxorder/wxorder.module';

@Module({
  // 表示该模块需要引入的依赖模块
  imports: [
    ConfigModule.forRoot({
      // 自定义.env文件路径（默认为根路径的 .env 文件），如果有多个，可以传递数组
      envFilePath: '.env',
      // 控制是否不解析.env文件，只使用运行时注入的环境变量
      ignoreEnvFile: false,
      // 是否是全局模块
      isGlobal: true,
    }),
    // 表示该模块需要使用 TypeORM 进行数据库操作，并设置了一些数据库连接信息
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: '124.222.78.14',
      port: 3306,
      username: 'admin',
      password: 'pRxjk8XDKermNP8H',
      database: 'water',
      entities: [`${__dirname}/../modules/**/*.entity{.ts,.js}`],
      // logging: true,
      synchronize: true,
      autoLoadEntities: true,
    }),
    // 表示该模块需要使用 Apollo 进行 GraphQL 查询，并设置了一些查询信息
    GraphQLModule.forRoot({
      driver: ApolloDriver,
      autoSchemaFile: './schema.gql',
    }),
    UserModule,
    OSSModule,
    AuthModule,
    StudentModule,
    OrganizationModule,
    CourseModule,
    CourseTypeModule,
    ConsumptionTypeModule,
    ConsumptionModule,
    ReservationModule,
    CardModule,
    CardRecordModule,
    ProductModule,
    OrderModule,
    WxpayModule,
    WxorderModule,
    ScheduleModule,
    ScheduleRecordModule,
  ],

  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
